// app

import dotenv from 'dotenv'; //引入全局基础配置
dotenv.config();
import db from './db'; // 引入数据库处理
db();

import Koa from "koa"; //Koa是构造函数,首字母需要大写
import router from "./router"; // 引入自定义router
import { Server } from 'http';
import path from 'path';
import koaStatic from 'koa-static'; // 读取静态资源文件
import koaBody from 'koa-body'; // 使用文件上传
import views from 'koa-views'; // 使用模板引擎
import AccessLogMiddleware from './middleware/AccessLogMiddleware'; // 自定义访问日志中间件

const cors = require('koa2-cors');
const errorHandler = require('../utils/errorHandler.js'); // 引入错误处理

const app = new Koa(); // 声明一个app实例

// 上传文件
app.use(koaBody({
  // 支持文件格式
  multipart: true,
  formidable: {
    // 上传目录-此处暂时屏蔽（upload路径下面有写具体实现，此处会重复）
    //uploadDir: path.join(__dirname, '../assets/upload-files'),
    // 保留文件扩展名
    keepExtensions: true,
    // 最大上传文件大小(默认10Mb)1mb=1024kb,1kb=1024字节；
    maxFieldsSize: 10 * 1024 * 1024,
  }
}));

// 加载模板引擎
app.use(views(path.join(__dirname, './view'), {
  extension: 'ejs'
}))

// 获取静态资源文件夹
console.log('---静态资源目录',path.join(__dirname, '..', 'assets'));
app.use(koaStatic(path.join(__dirname, '..', 'assets')));

// 允许后端跨域
app.use(cors());

// 调用自定义访问日志中间件
app.use(AccessLogMiddleware);

// 启动路由
app.use(router.routes());

// 允许任何类型请求，get post
app.use(router.allowedMethods());

// 错误处理
errorHandler(app);

const run = (port: any = 9000): Server => {
  // 监听端口
  return app.listen(port, () => {
    // 此处是在服务端打印
    console.log('---Server is running at http://localhost:' + port);
  })
}
export default run

